Daten kumulieren
Wenn man Daten aus einer Tabelle in einer anderen Tabelle zusammenfassen möchte, dann kann man dies mit COLLECT machen. Das ist jedoch recht langsam. Die andere Möglichkeit ist die, die Daten zu sammeln und am Ende einer Einheit an die zweite Tabelle anzufügen. Das ist aber langweilig. Mit dem folgenden Trick geht’s schnell und elegant.
REPORT ZCOLLECT.
DATA:
FELD,
*** Tabelle “Eins”
BEGIN OF TAB1 OCCURS 0,
FELD,
WERT(5) TYPE P DECIMALS 2,
END OF TAB1,
*** Tabelle “Zwei”
TAB2 LIKE TAB1 OCCURS 0 WITH HEADER LINE.
*** Feldsymbole
FIELD-SYMBOLS: <TAB1> STRUCTURE TAB1 DEFAULT TAB1,
<TAB2> STRUCTURE TAB2 DEFAULT TAB2.
START-OF-SELECTION.
*** Testwerte “A”
TAB1-FELD = ‘A’.
TAB1-WERT = 1.
APPEND TAB1.
TAB1-WERT = 2.
APPEND TAB1.
TAB1-WERT = 3.
APPEND TAB1.
TAB1-WERT = 4.
APPEND TAB1.
*** Testwerte “B”
TAB1-FELD = ‘B’.
TAB1-WERT = 1.
APPEND TAB1.
TAB1-WERT = 2.
APPEND TAB1.
*** Testwerte “C”
TAB1-FELD = ‘C’.
TAB1-WERT = 3.
APPEND TAB1.
TAB1-WERT = 4.
APPEND TAB1.
*** Daten sammeln
LOOP AT TAB1 ASSIGNING <TAB1>.
IF <TAB1>-FELD <> FELD.
*** Leeren Eintrag zur Zieltabelle hinzufügen
APPEND INITIAL LINE TO TAB2.
*** Hinzugefügten Eintrag mit Feldzuweisung lesen (ASSIGN)
READ TABLE TAB2 INDEX SY-TABIX ASSIGNING <TAB2>.
*** Vorbelegung
<TAB2>-FELD = <TAB1>-FELD.
*** Merker aktualisieren
FELD = <TAB1>-FELD.
ENDIF.
*** “COLLECT”
ADD <TAB1>-WERT TO <TAB2>-WERT.
ENDLOOP.
*** Ausgabe
LOOP AT TAB2 ASSIGNING <TAB2>.
WRITE: / <TAB2>-FELD, <TAB2>-WERT.
ENDLOOP.
Hinweis
Ab Release 4.6C können sie auch anstelle von APPEND + READ den folgenden Befehl verwenden:
APPEND INITIAL LINE TO itab ASSIGNING <fs>.
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024